package br.com.esrestaurante.dao;

import java.util.List;


import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.com.esrestaurante.entidades.Abertura;
import br.com.esrestaurante.entidades.Conta;
import br.com.esrestaurante.entidades.Mesa;
import br.com.esrestaurante.entidades.Usuario;
import br.com.esrestaurante.util.HibernateUtil;

public class AberturaDAO {
	Session session;

	public AberturaDAO() {
		this.session = HibernateUtil.getInstance().getSessionFactory()
				.getCurrentSession();
	}
	
	public void salvar(Abertura abertura) {
		session.save(abertura);
	}
	
	public void merge(Abertura abertura) {
		session.merge(abertura);
	}
	
	public void delete(Abertura abertura) {
		session.delete(abertura);
	}
	
	public Abertura getAbertura(Integer idAbertura) {
		return (Abertura) session.load(Abertura.class, idAbertura);
	}
	
	public List<Abertura> listarAberturas() {
		return session.createCriteria(Abertura.class).setFetchMode("listaContas", FetchMode.SELECT).list();
	}
	
	public Abertura recuperarUltimaAberturasClietne(Usuario cliente) {
		
		 Criteria criteria = session.createCriteria( Abertura.class ); 
		 criteria.add(Restrictions.eq("cliente", cliente));
	     criteria.addOrder( Order.desc( "dataAbertura" ) ); 
	     
	     return ( Abertura ) criteria.setMaxResults( 1 ).uniqueResult();   
	}

	public List<Abertura> listarAberturasPorMesa(Mesa mesa) {

		Criteria criteria = session.createCriteria(Abertura.class);
		criteria.add(Restrictions.eq("mesa", mesa));		

		return criteria.list();
	}
	
	public Abertura recuperarUltimaAberturasMesa(Mesa mesa) {
		
		 Criteria criteria = session.createCriteria( Abertura.class ); 
		 criteria.add(Restrictions.eq("mesa", mesa));
	     criteria.addOrder( Order.desc( "dataAbertura" ) );
	     
	     return ( Abertura ) criteria.setMaxResults( 1 ).uniqueResult();   
	}

}


